The subject matter discussed in the background section should not be assumed to be prior art merely as a result of its mention in the background section. Similarly, a problem mentioned in the background section or associated with the subject matter of the background section should not be assumed to have been previously recognized in the prior art. The subject matter in the background section merely represents different approaches, which in and of themselves may also correspond to implementations of the claimed inventions.
A query processor may be referred to as a query graph interpreter, or an interpreter for short. An instance of an interpreter may have a hierarchical graph-like structure that includes nodes which represent the specific operations (such as scanning, grouping, aggregating, and projecting) required by the query being executed, with the shape of the instance of the interpreter being specific to the query that is being executed. The graph's nodes may be referred to as “iterators” because they are implemented by a uniform iterator interface. An iterator can be an object that enables the traversal of a container, which is a grouping of a variable number of data items that have some shared significance to a problem being solved and need to be operated upon together in some controlled fashion, such as a stream of data elements. The data contained in a stream may be in either inverted or direct format. The ability to efficiently stream data between iterators is a key to providing high-performance for queries that are executed using a query engine. Data streams for a single query may contain hundreds of millions of data elements, and this number is expected to increase to many billions of data elements.